home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
serien
/
purity
/
nr.40
/
guidestripper
/
guidestripper.p
< prev
next >
Wrap
Text File
|
1994-11-27
|
12KB
|
470 lines
{ ****** Auto-Revision (do NOT edit) ********************
*
* © Copyright by BOMBERSOFT
*
* Filename : Sources:GuideStripper.p
* Created on : 21-Nov-94 um 14:27:19 Uhr.
* Created by : Björn Schotte
* Current revision : V1.00
*
*
* Purpose: Konvertierung AmigaGuide -> ASCII
*
*
* V1.00 kreiert am 21-Nov-94 um 14:27:19 Uhr. LogMessage:
* GUI mit Prozent-Fenster eingebaut.
*
* V0.000 kreiert am 19-Nov-94 um 16:14:32 Uhr. LogMessage:
* --- Initial release ---
******************************************************* }
PROGRAM GuideStripper;
USES Intuition, Exec, Graphics;
{$incl "asl.lib",
"gadtools.lib",
"workbench/startup.h",
"dos.lib"}
TYPE
String200 = STRING[200];
String256 = STRING[256];
CONST
vertag = "$VER: GuideStripper V1.00 (21.11.1994)";
VAR
StMess : p_WBStartup; STATIC;
f,f1 : Text; STATIC;
source,dest,pf,
zeile : String200; STATIC;
dummy : BOOLEAN; STATIC;
c : CHAR; STATIC;
i,zähler,fs,old,
OldLock : LONG; STATIC;
wp : p_Window; STATIC;
t : ARRAY[1..10] OF TagItem; STATIC;
psw,psh,xoff,yoff,
FontX, FontY,WBR,
WBB,ww,wh : INTEGER; STATIC;
MyTattr : p_TextAttr; STATIC;
psfont : p_TextFont; STATIC;
ps : p_Screen; STATIC;
vi : PTR; STATIC;
lib : p_Library; STATIC;
tattr : TextAttr; STATIC;
PROCEDURE UMeld(txt:String200; gad:STRING);
VAR
es : EasyStruct;
l : LONG;
BEGIN
es := EasyStruct(SizeOf(EasyStruct),0,"Usermeldung:",^txt,^gad);
l := EasyRequestArgs(NIL,^es,NIL,NIL);
END;
PROCEDURE CloneDatas;
BEGIN
ps := LockPubScreen("Workbench");
IF ps = NIL THEN
BEGIN
UMeld("Kann den Workbenchscreen nicht locken !!","Gelesen!");
HALT(20);
END ELSE
BEGIN
psw := ps^.Width;
psh := ps^.Height;
WBR := ps^.WBorRight;
WBB := ps^.WBorBottom;
psfont := ps^.RastPort.Font;
xoff := ps^.WBorLeft;
yoff := ps^.BarHeight;
vi := GetVisualInfoA(ps, NIL);
UnLockPubScreen(NIL, ps);
IF vi = NIL THEN
BEGIN
UMeld("Konnte keine VisualInfo bekommen !!","Ohje!");
HALT(20);
END;
END;
END;
FUNCTION ComputeX(value:INTEGER) : INTEGER;
BEGIN
ComputeX := ((FontX * value)+4) DIV 8;
END;
FUNCTION ComputeY(value:INTEGER) : INTEGER;
BEGIN
ComputeY := ((FontY*value)+4) DIV 8;
END;
PROCEDURE ComputeFont(width,height : INTEGER);
LABEL UseTopaz;
BEGIN
Forbid;
MyTattr := ^tattr;
MyTattr^.ta_Name := psfont^.tf_Message.mn_Node.ln_Name;
MyTattr^.ta_YSize := psfont^.tf_YSize;
FontY := psfont^.tf_YSize;
FontX := psfont^.tf_XSize;
Permit;
IF (width>0) AND (height>0) THEN
BEGIN
IF ( (ComputeX(width)+xoff+WBR)>psw) THEN GOTO UseTopaz;
IF ( (ComputeY(height)+yoff+WBB)>psh) THEN GOTO UseTopaz;
END;
EXIT;
UseTopaz:
MyTattr^.ta_Name := "topaz.font";
FontX := 8;
FontY := 8;
MyTattr^.ta_Flags := FPF_ROMFONT;
MyTattr^.ta_YSize := 8;
END;
FUNCTION AslFileReq(tit:STRING; VAR Filename,Dirname:String200) : BOOLEAN;
VAR
Req : p_Filerequester;
t : ARRAY[0..7] OF TagItem;
bool: BOOLEAN;
Dir1: String200;
BEGIN
t[0].ti_Tag := ASL_Hail;
t[0].ti_Data := tit;
t[1].ti_Tag := ASL_File;
t[1].ti_Data := ^Filename;
t[2].ti_Tag := ASL_Dir;
t[2].ti_Data := ^Dirname;
t[3] := TagItem(ASL_Width,350);
t[4] := TagItem(ASL_Height,200);
t[5] := TagItem(ASL_TopEdge,0);
t[6].ti_Tag := TAG_DONE;
Req := AllocAslRequest(ASL_Filerequest, ^t);
IF Req <> NIL THEN
BEGIN
IF AslRequest(Req,^t) THEN
BEGIN
AslFileReq := TRUE;
Filename:=req^.rf_File;
Dirname:=req^.rf_Dir;
IF DirName <> "" THEN
IF (Dirname[length(dirname)]<>':') AND (Dirname[length(dirname)]<>'/')
THEN Dirname:=Dirname+'/';
END ELSE AslFileReq := FALSE;
FreeAslRequest(Req);
END ELSE
BEGIN
AslFileReq := FALSE;
DisplayBeep(NIL);
UMeld("ASLRequest-Struktur konnte nicht"+CHR(10)+"angelegt werden !!","Huch?");
END;
END;
PROCEDURE Prozent(VAR max,akt : LONG);
VAR
p,y : LONG;
s : STRING;
it : IntuiText;
dummy : LONG;
BEGIN
p := Round((akt * 100) / max);
IF (p>0) AND (old <> p) THEN
BEGIN
old := p;
y := Round( (p * 196) / 100);
s := IntStr(p);
IF p<10 THEN s := " "+s
ELSE IF p<100 THEN s := " "+s;
s := s + "%";
SetAPen(wp^.RPort,3);
RectFill(wp^.RPort,xoff+ComputeX(4),yoff+ComputeY(3),
xoff+ComputeX(2)+ComputeX(y),
yoff+ComputeY(30));
it := IntuiText(1,3,JAM2,0,0,MyTattr,s,NIL);
PrintIText(wp^.RPort,^it,xoff+ComputeX(86),yoff+ComputeY(11)+
ComputeY(2));
END;
END;
PROCEDURE OverReadLine;
BEGIN
ReadLn(f, zeile);
zähler := zähler + Length(zeile);
Prozent(fs,zähler);
END;
PROCEDURE ReadChar;
BEGIN
Read(f, c);
Inc(zähler);
Prozent(fs,zähler);
END;
PROCEDURE OpenWin;
VAR
it : IntuiText;
BEGIN
ComputeFont(220,50);
ww := ComputeX(220);
wh := ComputeY(50);
t[1] := TagItem(WA_InnerWidth, ww);
t[2] := TagItem(WA_InnerHeight, wh);
t[3].ti_Tag := WA_Title;
t[3].ti_Data := "GuideStripper V1.00";
t[4] := TagItem(WA_Flags, WFLG_DEPTHGADGET+
WFLG_ACTIVATE+
WFLG_DRAGBAR);
t[5].ti_Tag := WA_ScreenTitle;
t[5].ti_Data := "GuideStripper V1.00 ©1994 by Björn Schotte -=- BomberSoft@bomber.mayn.sub.de";
t[6].ti_Tag := TAG_DONE;
wp := OpenWindowTagList(NIL, ^t);
IF wp = NIL THEN
BEGIN
UMeld("Konnte kein Fenster öffnen !!","Ooops!");
Close(f);
Close(f1);
ww := DeleteFile(dest);
HALT(20);
END;
t[1] := TagItem(GTBB_Recessed, 1);
t[2] := TagItem(GT_VisualInfo, LONG(vi));
t[3].ti_Tag := TAG_DONE;
DrawBevelBoxA(wp^.RPort,xoff+ComputeX(2),yoff+ComputeY(2),
ComputeX(200),ComputeY(30),^t);
SetAPen(wp^.RPort,1);
Move(wp^.RPort,xoff+ComputeX(2),yoff+ComputeY(32));
Draw(wp^.RPort,xoff+ComputeX(2),yoff+ComputeY(37));
it := IntuiText(1,0,JAM1,0,0,MyTattr,"0%",NIL);
PrintIText(wp^.RPort,^it,xoff+ComputeX(2),yoff+ComputeY(38));
Move(wp^.RPort,xoff+ComputeX(102),yoff+ComputeY(32));
Draw(wp^.RPort,xoff+ComputeX(102),yoff+ComputeY(37));
it := IntuiText(1,0,JAM1,0,0,MyTattr,"50%",NIL);
PrintIText(wp^.RPort,^it,xoff+ComputeX(96),yoff+ComputeY(38));
Move(wp^.RPort,xoff+ComputeX(202),yoff+ComputeY(32));
Draw(wp^.RPort,xoff+ComputeX(202),yoff+ComputeY(37));
it := IntuiText(1,0,JAM1,0,0,MyTattr,"100%",NIL);
PrintIText(wp^.RPort,^it,xoff+ComputeX(185),yoff+ComputeY(38));
END;
PROCEDURE CloseWin;
BEGIN
IF wp <> NIL THEN CloseWindow(wp);
END;
BEGIN
lib := IntuitionBase;
IF lib^.lib_Version < 37 THEN
BEGIN
IF FromWB THEN
BEGIN
Reset(input,"CON:0/0/200/60/Fehler!");
output := input;
END;
WriteLn(#27"[1mGuideStripper läuft nur ab OS2.04 !!!"+CHR(27)+"[0m");
IF FromWB THEN
BEGIN
Delay(100);
Close(input);
END;
HALT(20);
END;
IF FromWB THEN
BEGIN
StMess := StartupMessage;
OldLock := CurrentDir(StMess^.sm_ArgList^.wa_Lock);
END;
ASLBase := OpenLibrary("asl.library", 37);
IF ASLBase = NIL THEN
BEGIN
UMeld("asl.library V37 oder besser konnte nicht geöffnet werden!","Uups");
HALT(20);
END;
GadToolsBase := OpenLibrary("gadtools.library", 37);
IF GadToolsBase = NIL THEN
BEGIN
CloseLibrary(DOSBase);
UMeld("gadtools.library V37 oder besser konnte nicht geöffnet werden!","Uups");
HALT(20);
END;
DOSBase := OpenLibrary("dos.library", 37);
IF DOSBase = NIL THEN
BEGIN
CloseLibrary(ASLBase);
CloseLibrary(GadToolsBase);
UMeld("dos.library V37 oder besser konnte nicht geöffnet werden!","Uups");
HALT(20);
END;
tattr := TextAttr("topaz.font",8,0,0);
CloneDatas;
zähler := 0;
old := -1;
pf := "";
source := "";
dest := "";
dummy := ASLFileReq("Bitte Quelldatei auswählen:",source,pf);
IF dummy = FALSE THEN HALT(20);
source := pf + source;
dummy := ASLFileReq("Bitte Zieldatei auswählen:",dest,pf);
IF dummy = FALSE THEN HALT(20);
dest := pf + dest;
Reset(f, source);
IF IOResult <> 0 THEN
BEGIN
UMeld("Konnte die Datei"+CHR(10)+source+CHR(10)+"nicht öffnen!!!","ok");
HALT(20);
END;
Buffer(f, 10000);
fs := FileSize(f);
ReWrite(f1, dest);
IF IOResult <> 0 THEN
BEGIN
UMeld("Konnte die Datei"+CHR(10)+dest+CHR(10)+"nicht anlegen!!!","ok");
HALT(20);
END;
OpenWin;
WHILE NOT EOF(f) DO
BEGIN
ReadChar;
IF c <> "@" THEN
BEGIN
CASE c OF
"\" : BEGIN
ReadChar;
CASE c OF
"@" : Write(f1,c);
CHR(34) : Write(f1,c);
ELSE
Write(f1,"\"+c);
END;
END;
ELSE
Write(f1, c);
END;
END ELSE
BEGIN
ReadChar;
CASE c OF
"D","d",
"M","m",
"A","a",
"(",
"R","r",
"$",
"F","f",
"H","h",
"W","w",
"H","h",
"T","t",
"I","i",
"E","e",
"P","p",
"H","h" : OverReadLine;
"N","n":
BEGIN
ReadChar;
IF UpCase(c) = "E" THEN OverReadLine ELSE
BEGIN
FOR i := 1 TO 3 DO ReadChar; { ODE }
zeile := "";
REPEAT
ReadChar;
zeile := zeile + c;
UNTIL c = CHR(10);
IF POS(CHR(34),zeile)<>0 THEN
BEGIN
Delete(zeile,1,POS(CHR(34),zeile));
i := 1;
Writeln(f1);
Write(f1,CHR(27)+"[7m");
WHILE zeile[i] <> CHR(34) DO
BEGIN
Write(f1,zeile[i]);
Inc(i);
END;
Writeln(f1,CHR(27)+"[0m");
Writeln(f1);
END ELSE
BEGIN
i := 1;
WHILE zeile[i] = " " DO Inc(i);
Delete(zeile,1,i-1);
Writeln(f1);
Writeln(f1,CHR(27)+"[7m"+zeile+CHR(27)+"[0m");
Writeln(f1);
END;
END;
END;
"{" : BEGIN
ReadChar;
CASE c OF
"F","f" :
BEGIN
REPEAT
ReadChar;
UNTIL c = "}";
END;
CHR(34):
BEGIN
REPEAT
ReadChar;
IF c<>CHR(34) THEN Write(f1,c);
UNTIL c = CHR(34);
WHILE c<>"}" DO ReadChar;
END;
"B","b": BEGIN
ReadChar;
IF c = "}" THEN Write(f1, CHR(27)+"[1m")
ELSE
BEGIN
REPEAT
ReadChar;
UNTIL c = "}";
END;
END;
"I","i": BEGIN
Write(f1, CHR(27)+"[3m");
ReadChar;
END;
"U","u": BEGIN
ReadChar;
IF c = "}" THEN
BEGIN
Write(f1, CHR(27)+"[4m");
ReadChar;
END ELSE
BEGIN
CASE c OF
"B","b": BEGIN
Write(f1, CHR(27)+"[22m");
ReadChar;
END;
"I","i": BEGIN
Write(f1, CHR(27)+"[23m");
ReadChar;
END;
"U","u": BEGIN
Write(f1, CHR(27)+"[24m");
ReadChar;
END;
ELSE END;
END;
END;
ELSE END;
END;
ELSE END;
END;
END;
Close(f);
Close(f1);
Delay(50);
CloseWin;
CloseLibrary(DOSBase);
CloseLibrary(ASLBase);
CloseLibrary(GadToolsBase);
END.